/* 
在这里定义和用户相关的路由处理函数，供router/user.js模块进行调用
*/
const db = require("../db/index.js");
const bcrypt = require("bcryptjs"); // 密码加密模块
const config = require("../config.js");
const jwt = require("jsonwebtoken");
// 注册用户的处理函数
exports.reguser = (req, res) => {
  // 获取客户端提交到服务端的用户数据信息
  const userInfo = req.body;

  console.log(userInfo, userInfo?.username, "userInfo====================");
  const sql = "select * from my_db_01.ev_users where username = ? ";
  db.query(sql, userInfo?.username, (err, result) => {
    if (err) {
      /* return res.send({
        message: err?.message,
        code: 500,
      }); */
      // 优化使用app.js中优化配置的res.cc方法
      return res.cc(err);
    }
    console.log("result----------------------------", result);
    // 用户名被占
    if (result?.length > 0) {
      /* return res.send({
        message: "用户名已存在,请更换其他用户名",
        code: 500,
      }); */
      // 优化使用app.js中优化配置的res.cc方法
      return res.cc("用户名已存在,请更换其他用户名 ");
    }
    // 加密密码通过bcrypt加密
    const hashPwd = bcrypt.hashSync(userInfo?.password, 10);
    console.log(hashPwd, "hashPwd----------------------------");
    // 插入用户数据到数据库

    const sqlStr = "insert  into  my_db_01.ev_users set ?";
    db.query(
      sqlStr,
      {
        username: userInfo?.username,
        password: hashPwd,
      },
      (err, result) => {
        // 执行sql语句失败
        // if (err) return res.send({ message: err?.message, code: 500 });
        // 优化使用app.js中优化配置的res.cc方法
        if (err) return res.cc(err);
        // 插入成功
        if (result?.affectedRows !== 1) {
          // return res.send({ message: "注册用户失败，请稍后再试", code: 200 });
          // 优化使用app.js中优化配置的res.cc方法
          return res.cc("注册用户失败，请稍后再试");
        }
        // res.send({ message: "注册成功-node", code: 200 });
        // 优化使用app.js中优化配置的res.cc方法
        res.cc("注册成功-node", 0);
      }
    );
  });
};

// 登录用户的处理函数
exports.login = (req, res) => {
  const userInfo = req.body;
  console.log("登录-------", userInfo);
  const queryStr = "select * from my_db_01.ev_users where username=?";
  db.query(queryStr, userInfo?.username, (err, result) => {
    if (err) return res.cc(err);
    console.log("result----------------------------", result.length);
    if (result?.length !== 1) {
      return res.cc({ message: "用户名不存在", code: 500 });
    }
    // 加密密码通过bcrypt加密
    const compareSyncPwd = bcrypt.compareSync(
      userInfo?.password,
      result[0].password
    );
    if (!compareSyncPwd) {
      return res.cc("密码错误，请重新输入");
    }
    const user = {
      ...result[0],
      password: null,
      user_pic: null,
    };
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: config.expiresIn,
    });
    console.log(tokenStr, "token----------------------------");
    res.send({
      message: "登录成功",
      code: 200,
      token: "Bearer " + tokenStr, // 添加"Bearer "有空格方便客户端使用
    });
  });
};
